package com.ruoyi.web.service.impl;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.web.domain.dto.PushMessageDto;
import com.ruoyi.web.server.MessageBody;
import com.ruoyi.web.service.PushMessageService;
import com.ruoyi.web.util.SM3Utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import sviolet.smcrypto.SmCryptoUtil;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class LoveShandongPushMessageServiceImpl implements PushMessageService {



    @Value("${aishandong.message.url}")
    private String url;

    @Value("${aishandong.message.key}")
    private String key;

    @Value("${aishandong.message.appcode}")
    private String appcode;




    @Override
    public HttpResponse pushMessage(PushMessageDto dto) {
        String userNameEncode = SM3Utils.encrypt(dto.getUserName());
        List<MessageBody> batchList = new ArrayList<>();
        MessageBody messageBody = new MessageBody.Builder()
                // 模板id
                .templateId(dto.getTemplateId())
                // 1：账号 2： 手机号 3：身份证号
                .userType(1)
                // 和userType对应，传账号/手机号/身份证号（SM3加密）
                .userInfo(userNameEncode)
                // 标题
                .title(dto.getTitle())
                // 模板占位符 {"键":"值", "键":"值"}
                // 例如模板内容为： 直播主题：{{liveTitle.DATA}}开始时间：{{startTime.DATA}}主播：{{anchor.DATA}}
                .templateWord("companyName", dto.getCompanyName())
                // 消息跳转地址
                .url("")
                .pushType(2)
                .build();
        batchList.add(messageBody);
        // 加密
        String encryptData = SmCryptoUtil.sm2Encode(JSON.toJSONString(batchList), key);

        Map<String, Object> paramMap = new HashMap<>(16);
        paramMap.put("appcode", appcode);
        paramMap.put("param", encryptData);

        // 调用消息发送接口
        HttpResponse response = HttpRequest.post(url)
                .form(paramMap)
                .execute();
        return response;
    }

    public static void main(String[] args) {
        List<MessageBody> batchList = new ArrayList<>();
        //String userNameEncode = SmCryptoUtil.sm3Encode("zwfw46438477");
        String userNameEncode = SM3Utils.encrypt("zwfw46438477");
        System.out.println("sm3:"+userNameEncode);
        MessageBody messageBody = new MessageBody.Builder()
                // 模板id
                .templateId("80bd04a2b2a443ef8e619858f82b99fa")
                // 1：账号 2： 手机号 3：身份证号
                .userType(1)
                // 和userType对应，传账号/手机号/身份证号（SM3加密）
                .userInfo(userNameEncode)
                // 标题
                .title("【企业诉求处理状态变更通知】")
                // 模板占位符 {"键":"值", "键":"值"}
                // 例如模板内容为： 直播主题：{{liveTitle.DATA}}开始时间：{{startTime.DATA}}主播：{{anchor.DATA}}
                .templateWord("companyName", "山东德技零碳数字技术有限公司11")
                // 消息跳转地址
                .url("")
                .pushType(2)
                .build();
        batchList.add(messageBody);
        // 加密
        String encryptData = SmCryptoUtil.sm2Encode(JSON.toJSONString(batchList), "046bd260cd6c424a4cfa73bf995fef56c8025357abde0654c4ca32e2db733849af2ec1385c52af137a94a33aee51c5a3ac26f325a1c4fe611df28920390ab132e1");
        Map<String, Object> paramMap = new HashMap<>(16);
        paramMap.put("appcode", "a9ef040b8e2942d39fa8c94e42b13d70");
        paramMap.put("param", encryptData);

        // 调用消息发送接口
        HttpResponse response = HttpRequest.post("https://fw1.isdapp.shandong.gov.cn/jpaas-jms-web-server/interface/message")
                .form(paramMap)
                .execute();
        System.out.println(response);
        String body = response.body();
        JSONObject jsonObject = JSONObject.parseObject(body);
        System.out.println(jsonObject);
        System.out.println(jsonObject.get("success"));
    }
}
